---
sidebar_position: 2
description: Learn how to set up and use the DeviceScript command line tool for
    creating and managing projects, and improve your development workflow.
keywords:
    - DeviceScript
    - command line
    - CLI
    - project setup
    - development workflow
---

# Command Line

The command line tool is compatible with container and virtual machines so you can run it
in Docker, GitHub Codespaces, ...

## Setting up the project

Let's get started by installing the [DeviceScript command line](/api/cli) and create an empty project

-   Open a terminal in a new folder
-   install [Node.js 16+](https://nodejs.org/en/download/) if not already installed
-   Use the `init` command to setup a new project

```bash
npx --yes @devicescript/cli@latest init
```

You will have the following files created.

```
.devicescript/     reserved folder for devicescript generated files
package.json       project configuration
devsconfig.json    configure the DeviceScript compiler with additional flags,
                   also used by VSCode extension to activate.
src/               directory for DeviceScript sources
src/main.ts        usual name for your entry point application
src/tsconfig.json  configure the TypeScript compiler to compile DeviceScript syntax
...
```

-   open `src/main.ts` and copy the following code

```ts title="src/main.ts"
import * as ds from "@devicescript/core"
import { debounceTime, filter } from "@devicescript/observables"

const sensor = new ds.AirPressure()
const mouse = new ds.HidMouse()
// listen for pressure changes
sensor.reading
    .pipe(
        filter(pressure => pressure > 1400),
        debounceTime(500)
    )
    .subscribe(async () => {
        console.log(`click!`)
        await mouse.setButton(
            ds.HidMouseButton.Left,
            ds.HidMouseButtonEvent.Click
        )
    })
```

## Launch the build watch

Assuming `src/main.ts` is the root file of your application,
launch a compilation task in watch mode using this command.

```bash
devs devtools src/main.ts
```

or, for short,

```bash
yarn watch
```

The command line task will also start a local web server that will send the compiled bytecode
to a developer tools page similar to the one hosted in the docs.

-   open the developer tools page, typically http://localhost:8081/ (see cli output)
-   use te developer tools page similarly to the embedded docs page

### Native transports

If you are working on the OS directly connected to the hardware device,
you can use start a native transport (serial, usb) from the command line.
However, native transport typically require native npm module that might not be compatible
with your operating system. The command line tool will detect missing dependencies
and prompt you to install them.

```bash
devs devtools --serial src/main.ts
```

## Edit, deploy, debug loop

From here, your developer inner loop will be very similar to building/debugging a web site with hot reload.

-   make an edit in your source file, say `src/main.ts`
-   after a couple seconds, the compiler picks up the changes, produces a new bytecode and sends it to the developer tools
-   the developer tools automatically deploy the bytecode to the selected device (by default the simulator)
-   switch from VS Code to the browser and debug your new code
